/**
 * 字符串工具函数
 */

/**
 * 计算字符串长度
 * @param {string} str - 要计算长度的字符串
 * @returns {number} 字符串长度，如果输入无效则返回0
 */
function getStringLength(str) {
  if (str === null || str === undefined) {
    return 0
  }
  
  // 转换为字符串类型
  const stringValue = String(str)
  
  // 返回字符串长度
  return stringValue.length
}

/**
 * 计算字符串的字节长度（UTF-8编码）
 * @param {string} str - 要计算字节长度的字符串
 * @returns {number} 字节长度
 */
function getStringByteLength(str) {
  if (str === null || str === undefined) {
    return 0
  }
  
  const stringValue = String(str)
  
  // 使用 TextEncoder 计算 UTF-8 字节长度
  try {
    const encoder = new TextEncoder()
    return encoder.encode(stringValue).length
  } catch (error) {
    // 如果 TextEncoder 不可用，使用简单计算
    let byteLength = 0
    for (let i = 0; i < stringValue.length; i++) {
      const charCode = stringValue.charCodeAt(i)
      if (charCode <= 0x7F) {
        byteLength += 1
      } else if (charCode <= 0x7FF) {
        byteLength += 2
      } else if (charCode <= 0xFFFF) {
        byteLength += 3
      } else {
        byteLength += 4
      }
    }
    return byteLength
  }
}

/**
 * 检查字符串是否为空或只包含空白字符
 * @param {string} str - 要检查的字符串
 * @returns {boolean} 如果字符串为空或只包含空白字符则返回true
 */
function isEmptyString(str) {
  if (str === null || str === undefined) {
    return true
  }
  
  const stringValue = String(str)
  return stringValue.trim().length === 0
}

/**
 * 截取字符串到指定长度
 * @param {string} str - 要截取的字符串
 * @param {number} maxLength - 最大长度
 * @param {string} suffix - 截取后添加的后缀，默认为'...'
 * @returns {string} 截取后的字符串
 */
function truncateString(str, maxLength, suffix = '...') {
  if (str === null || str === undefined) {
    return ''
  }
  
  const stringValue = String(str)
  
  if (stringValue.length <= maxLength) {
    return stringValue
  }
  
  return stringValue.substring(0, maxLength) + suffix
}

module.exports = {
  getStringLength,
  getStringByteLength,
  isEmptyString,
  truncateString
} 